import numpy as np

arr = np.array([[3, 1, 2], [6, 4, 5]])
# 沿着最后一个轴（默认）排序，获取每行的排序索引
indices = np.argsort(arr)

print("原始数组:\n", arr)
print("每行排序后的索引:\n", indices)

a = np.array([[3, 7, 6], [9, 1, 5]])
print("我们的数组是：")
print(a)
print("\n")
print("调用 sort() 函数：")
print(np.sort(a))
print("\n")
print("按列排序：")
print(np.sort(a, axis=0))
print("\n")
print("按行排序：")
print(np.sort(a, axis=1))
print("\n")
# 在 sort 函数中排序字段
dt = np.dtype([("name", "S10"), ("age", int)])
a = np.array([("raju", 21), ("anil", 25), ("ravi", 17), ("amar", 27)], dtype=dt)
print("我们的数组是：")
print(a)
print("\n")
print("按 name 排序：")
print(np.sort(a, order="name"))
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("原始数组:")
print(arr2d)

# 获取单行
# print(arr2d[1, :])  # 输出: [4 5 6] - 第二行所有列
# print(arr2d[1])  # 输出同上，可以省略后面的逗号和冒号
# 获取单列
print(arr2d[:, 1])  # 输出: [2 5 8] - 所有行第二列

# 获取子矩阵
print(arr2d[:2, 1:])  # 输出: [[2 3] [5 6]] - 前两行，后两列

# 同时切片行和列
print(arr2d[::2, ::2])  # 输出: [[1 3] [7 9]] - 每隔一行和一列取一个
# 练习答案
arr = np.array([i for i in range(1, 17)])
arr = arr.reshape(4, 4)
print(arr)
# a)
print(arr[0, :])  # 或 arr[0]

# b)
print(arr[:, 1])

# c)
print(arr[:2, :2])

# d)
print(arr[2:, 2:])

# e)
print(arr[::2, :])  # 奇数索引行(0,2,...)

# f)
print(arr[:, 1::2])  # 偶数列(索引1,3,...)


arr = np.random.randint(0, 100, size=(6, 8))
print(arr)
# a)
print(arr[arr > 50])

# b)
print(arr[1:4, 2:6])

# c)
print(arr[arr % 5 == 0])

# d)
print(arr.max(axis=1))

# e)
print(arr.min(axis=0))

# f)
mask = (arr > 30) & (arr < 70)

# print(arr[(arr > 30) & (arr < 70)])
print(arr[mask])
print(np.where(mask))

# print column 0 and 2
print(arr[:, [0, 2]])
